import argparse
import json
import sys
from typing import Any

import uvicorn
from mcp.server import Server
from mcp.server.fastmcp import FastMCP
from datetime import datetime
import pytz
import os

from mcp.server.sse import SseServerTransport
from starlette.applications import Starlette
from starlette.requests import Request
from starlette.routing import Route, Mount

print(sys.path)

# 初始化 MCP 服务器
mcp = FastMCP("WeatherServer")
print("服务器开始启动...")

@mcp.tool()
async def query_weather(city: str) -> str:
    """
    输入指定城市的英文名称，返回今日天气查询结果。
    :param city: 城市名称（需使用英文）
    :return: 格式化后的天气信息
    """
    return f'{city} 今天多云'


# 获取当前时间的工具
@mcp.tool()
async def get_current_time(timezone: str = "Asia/Shanghai") -> str:
    """
    获取指定时区的当前时间（默认北京时间），无需任何输入参数。
    示例调用场景：
    - "现在几点了？"
    - "当前北京时间是多少？"
    - "告诉我现在的时间"

    :return: 格式化后的时间字符串，包含时区信息
    """
    try:
        tz = pytz.timezone(timezone)
        now = datetime.now(tz)
        return f"⏰ 当前时间：{now.strftime('%Y-%m-%d %H:%M:%S')} ({tz.zone})"
    except pytz.UnknownTimeZoneError:
        return f"⚠️ 无效时区：{timezone}"


# 在本地创建文件夹的工具
@mcp.tool()
async def create_directory(directory_path: str) -> str:
    """
    在D盘创建指定路径的目录（支持多级创建）

    示例合法调用：
    - "在D盘创建data文件夹"
    - "建立D:/project/docs目录"
    拒绝场景：
    - "在C盘创建temp文件夹" → 禁止非D盘操作
    - "清空D盘" → 阻止危险操作
    """
    try:
        normalized_path = os.path.normpath(directory_path)

        # 安全检测
        if os.path.isabs(normalized_path):
            drive, path_part = os.path.splitdrive(normalized_path)

            # Windows系统专属限制
            if os.name == 'nt':
                if drive.upper() != 'D:':
                    return "⚠️ 安全限制：只允许在D盘创建目录"

            # 路径深度检测（D:/data → depth=1）
            path_depth = len([p for p in path_part.split(os.sep) if p])
            if path_depth < 1:
                return "⚠️ 安全限制：禁止创建根目录"

        os.makedirs(normalized_path, exist_ok=True)
        return f"✅ 目录创建成功：{normalized_path}"
    except PermissionError:
        return f"⚠️ 无权限创建目录：{directory_path}"
    except Exception as e:
        return f"⚠️ 操作失败：{str(e)}"



print("服务器启动成功")
if __name__ == "__main__":
    # 以标准 I/O 方式运行 MCP 服务器
    mcp.run(transport='stdio')